home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-10-30 | 7.8 KB | 171 lines | [TEXT/R*ch] |
- #include "window layer.h"
- #include "graphics dispatch.h"
-
- static WindowPtr MyNewWindowDispatch(short layer, Boolean useColor,
- ExtendedWindowPtr storage, const Rect *boundsRect, ConstStr255Param title,
- short procID, Boolean goAwayFlag, long refCon);
- static void SetFrontWindowInLayer(WindowPtr newWindow, WindowPtr oldFrontWindow,
- short layer);
- static WindowPtr GetFrontWindowInLayer(short layer);
- static void SetWindowPrevious(WindowPtr window, WindowPtr previousWindow);
- static WindowPtr GetWindowPr ayer=GetWindowLayer(window);
- oldFrontWindow=GetFrontWindowInLayer(layer);
- if (oldFrontWindow!=window)
- {
- nextWindow=GetWindowNext(window); /* might be 0L */
- previousWindow=GetWindowPrevious(window); /* guaranteed !=0L */
- SetWindowNext(previousWindow, nextWindow);
- if (nextWindow!=0L)
- SetWindowPrevious(nextWindow, previousWindow);
- SetFrontWindowInLayer(window, oldFrontWindow, layer);
- }
-
- if ((layer==kDocumentLayer) && ((iter=GetFrontWindowInLayer(kFloatLayer))!=0L))
- {
- while ((nextIter=GetWindowNext(iter))!=0L)
- iter=nextIter;
- SendBehind(window, iter);
- }
- else
- {
- SelectWindow(window);
- }
-
- if (oldFrontWindow==window)
- return FALSE;
-
- RemoveHilitePatch();
- if ((layer==kDocumentLayer) && (oldFrontWindow!=0L))
- {
- HiliteWindow(oldFrontWindow, FALSE);
- ActivateWindow(oldFrontWindow, FALSE);
- }
- HiliteWindow(window, TRUE);
- InstallHilitePatch();
- ActivateWindow(window, TRUE);
- }
- else
- {
- SelectWindow(window);
- }
-
- return TRUE;
- }
-
- void SetFrontWindowInLayer(WindowPtr newWindow, WindowPtr oldFrontWindow,
- short layer)
- {
- if (newWindow!=0L)
- SetWindowNext(newWindow, oldFrontWindow);
- if (oldFrontWindow!=0L)
- SetWindowPrevious(oldFrontWindow, newWindow);
- if (newWindow!=0L)
- SetWindowPrevious(newWindow, 0L);
- gFrontWindowInLayer[layer]=newWindow;
- }
-
- WindowPtr GetFrontWindowInLayer(short layer)
- {
- return gFrontWindowInLayer[layer];
- }
-
- void SetWindowPrevious(WindowPtr window, WindowPtr previousWindow)
- {
- ((ExtendedWindowPtr)window)->previousWindow=previousWindow;
- }
-
- WindowPtr GetWindowPrevious(WindowPtr window)
- {
- return ((ExtendedWindowPtr)window)->previousWindow;
- }
-
- void SetWindowNext(WindowPtr window, WindowPtr nextWindow)
- {
- ((ExtendedWindowPtr)window)->nextWindow=nextWindow;
- }
-
- WindowPtr GetWindowNext(WindowPtr window)
- {
- return ((ExtendedWindowPtr)window)->nextWindow;
- }
-
- void SetWindowLayer(WindowPtr window, short layer)
- {
- ((ExtendedWindowPtr)window)->layer=layer;
- }
-
- short GetWindowLayer(WindowPtr window)
- {
- return ((ExtendedWindowPtr)window)->layer;
- }
-
- Boolean WindowHasLayer(WindowPtr window)
- {
- if (window==0L)
- return FALSE;
- else
- return ((ExtendedWindowPtr)window)->magic==kMagicNumber;
- }
-
- Boolean WindowIsFloat(WindowPtr window)
- {
- if (window==0L)
- return FALSE;
- else
- return ((ExtendedWindowPtr)window)->layer==kFloatLayer;
- }
-
- WindowPtr GetFrontDocumentWindow(void)
- {
- return GetFrontWindowInLayer(kDocumentLayer);
- }
-
- WindowPtr GetIndWindowPtr(short index)
- {
- WindowPtr w;
- short i;
-
- for (i=NUM_LAYERS-1; i>=0; i--)
- {
- w=GetFrontWindowInLayer(i);
- while ((w!=0L) && (GetWindowIndex(w)!=index))
- w=GetWindowNext(w);
- if (w!=0L)
- return w;
- }
-
- return 0L;
- }
-
- void InstallHilitePatch(void)
- {
- UniversalProcPtr newAddress;
-
- gOldHiliteRoutine=GetToolTrapAddress(_HiliteWindow);
- newAddress=(UniversalProcPtr)StripAddress(MyHiliteWindow);
- SetToolTrapAddress(newAddress, (short)_HiliteWindow);
- }
-
- void RemoveHilitePatch(void)
- {
- SetToolTrapAddress(gOldHiliteRoutine, (short)_HiliteWindow);
- }
-
- pascal void MyHiliteWindow(WindowPtr theWindow, Boolean fHilite)
- {
- }
-
- void ActivateWindow(WindowPtr window, Boolean activate)
- {
- GrafPtr curPort;
-
- GetPort(&curPort);
- SetPort(window);
- if (activate)
- ActivateWindowDispatch(GetWindowIndex(window));
- else
- DeactivateWindowDispatch(GetWindowIndex(window));
- UpdateControls(window, window->visRgn);
- SetPort(curPort);
- }
-